package core

import (
	"log"
	"sync"

	"github.com/go-pay/gopay/wechat/v3"
)

var (
	wxTemp *wx
	WxCli  *wechat.ClientV3
	WeOnce sync.Once
)

const (
	weAppid      = "wxdaa2ab9ef87b5497"
	weMchId      = "1368139502"
	weSerialNo   = ""
	weAPIv3Key   = ""
	wePrivateKey = "GFDS8j98rewnmgl45wHTt980jg543abc"
)

// init 初始化微信客户端 v3
// mchid：商户ID 或者服务商模式的 sp_mchid
// serialNo：商户证书的证书序列号
// apiV3Key：apiV3Key，商户平台获取
// privateKey：私钥 apiclient_key.pem 读取后的内容
func init() {
	client, err := wechat.NewClientV3(weMchId, weSerialNo, weAPIv3Key, wePrivateKey)
	if err != nil {
		log.Println(err.Error())
		return
	}

	// 设置微信平台API证书和序列号（推荐开启自动验签，无需手动设置证书公钥等信息）
	//client.SetPlatformCert([]byte(""), "")

	// 启用自动同步返回验签，并定时更新微信平台API证书（开启自动验签时，无需单独设置微信平台API证书和序列号）
	err = client.AutoVerifySign()
	if err != nil {
		log.Println(err.Error())
		return
	}

	// 自定义配置http请求接收返回结果body大小，默认 10MB
	// client.SetBodySize() // 没有特殊需求，可忽略此配置
	// 打开Debug开关，输出日志，默认是关闭的
	// client.DebugSwitch = gopay.DebugOn

	WxCli = client
}

type wx struct{}

func NewWx() *wx {
	WeOnce.Do(func() {
		wxTemp = &wx{}
	})
	return wxTemp
}
